Иследование сервиса "Ненужные вещи"

Пользователи совершают много действий в приложении, в этих данных должны быть инсайты, которые позволят стать лучшим приложением для продажи ненужных вещей.

Цель исследования — Нужно разобраться, как ведут себя пользователи сервиса.

Входные данный

Ход исследования

  1. Обзор данных
    • 1.1 Мы проведем загрузку и обзор предоставленных данных
  2. Предобработка данных
    • 2.1 Проверка на дубликаты
    • 2.2 Проверка на пропуски
    • 2.3 Проверка заголовков на нарушения стиля
    • 2.4 Проверка на другие не соответствия
  3. Функции для исследования
  4. Исследовательский анализ данные
    • 3.1 Коэффициент удержания пользователей (retention rate)
    • 3.2 Время пользователей проведенное в приложении, выделим сессии по тайм-аут пользователя (30 мин.)
    • 3.3 Частота совершения событий
    • 3.4 Конверсия в целевое действие contacts_show
  5. Сегментирование пользователей
    • 4.1 Проведем сегментирование пользовательй на группы
  6. Ответы на основные вопросы
    • 5.1 Пользователи какой группы склонны часто возвращаться в мобильное приложение (retention rate)?
    • 5.2 Пользователи какой группы часто делают целевое событие (конверсия в целевое действие)?
    • 5.1 Поиск "проблемного места", на каком-то действии сессия часто завершается не доходя до целевого?
  7. Проверим гипотезы
    • 7.1 Нулевая гипотеза что у пользователей использующих Yandex и Google (retention rate) не отличается, альтернативная отличается.
    • 7.2 Нулевая гипотеза что у пользователей использующих приложение днем конверсия не отличается от проводящим в другое время суток, альтернативная отличается.
  8. Вывод

Обзор данных

Мы проведем загрузку и обзор предоставленных данных

Импорт библиотек и загрузка данных

pandas - для загрузки и обработки данных мы воспльзуемся библеотекой .

numpy - библиотека высокоуровневых математических функций

scipy - библиотека математического и числового анализов

datetime - библиотека для работой с датой

re - модуль для регулярных выражений

seaborn - библиотека для создания статистических графиков

matplotlib.pyplot - библиотека для работы с графиками

plotly - библиотека визуализации данных (для воронкообразных диаграмм)

Загрузим файл из папки /datasets и сохраним в переменную

Загрузим файлы для проекта:

Предобработка данных

ссылка в содержание

Проверка на дубликаты и на пропуски

В mobile_soures очевидных дубликатов нет, пустых ячеек тоже нет.

Есть нарушения стиля в заголовках, прежде чем править их посмотрим как обстоят дела со второй базой:

В mobile_dataset тоже нет очевидных дубликатов и пустых ячеек, но тоже есть нарушения стиля в заголовках.

Поправим заголовки:

Проверка заголовков на нарушения стиля

Заголовки поправленны, идем дальше.

Проверка на другие не соответствия

Отлично, приведем дату и время к правильному формату:

Посмотрим за какое время у нам предоставлена база mobile_dataset

С понедельника 7 октября 2019 года по воскресенье 3 ноября 2019 года (с 00:00 по 23:58) То есть временной срез за 4 недели.

Посмотрим на пересечения в базах по id пользователей:

Посмотрим на события в базе:

Взгляд на события по количеству их в базе:

показ подсказки</br> показ фотографии</br> открыть объявление</br> контакты показать</br> карта</br> поиск 1</br> избранное добавить</br> поиск 5</br> клик по подсказке</br> поиск 4</br> вызов контакта</br> поиск 3</br> поиск 6</br> поиск 2</br> поиск 7</br> показ контакты</br>

Посмотрим чуть подробнее событие просмотр контактов:

Такие события есть и у разных каналов и нет четкой границе по времени чтобы разделить их на смену названия, и это есть у разных пользователей.

Объеденим их так как нет причин разделять их на разное события.

Какая то ошибка привела разным именам события нужно написать разработчикам чтобы посмотрели как записываются или выгружаются данные.

проверим нашу замену:

хорошо

перейдем событию поиска,

Проверим выделив уникальные id "search_7" и проверим были ли предыдущие поиски и как они распределены.

Видим что поиски идут беспорядочно, search_6 через секунду search_5 по через 7,5 минут search_7 затем опять search_5 все это у одного пользователя. Какая то ошибка привела к нумерации события нужно написать чтобы разработчикам чтобы посмотрели записываются или выгружаются данные.

вторую гипотезу не будем расматривать так она так же не допустима, переменуем все события поиска как search.

Переходим дальше, проверим какое первое события происходит у пользователей(проверим возможно запуск приложения начинается с подсказки`tips_show):

33 % первых событий у пользователей это показ подсказки tips_show, трудно сказать первый ли это запуск у самих пользователей или приложение запускается с экрана подсказки.

Так же не стоит отбрасывать что пользователям приходится постоянно обращатся к справке так как интуитивно не понятно где и что находится в приложении.

В любом случае нужно указать на это разработчикам.

Так же смущает разница кол-ва события "нажатие на справку"(1%) и ее "показ"(54% от всех событий)

Так же не стоит отметать какую то ошибку при отчете, события не было но в отчете оно отобразилась. Или пользователи действительно ее видят, нужно узнать у команды поддержки приложения есть ли какие-то жалобы в этой связи.

Посмотрим какое у нас кол-во уникальных пользователей и как они распределены по источникам:

С предобработкой закончили переходим дальше.

Функции для исследовательского анализа

ссылка в содержание

Напишем функции для для исследовательского анализа:

Функция для подписей на графике

функция построения графика

Функция профилей пользователей

функция создания таблицы сессии

Напишем функции Retention Rate(кофициент удержания),filter_data(сглаживание графика) и plot_retention(визуализация удержания)

Напишем функцию конверсии в целевое действие:

Напишем функцию для формирования воронки действия:

Напишем функцию конверсии одного целевого события от всех уникальных пользователей:

Напишем функцию для проверки гипотез используя для этого т-тест:

Функция z-тест для пропорций:

Исследовательский анализ данные

ссылка в содержание

Время пользователей проведенное в приложении

Подготовим данные для дальнейшего анализа,

посмотрим сколько проходит времени между событиями у пользователей

среднее 233 минуты, такая разница с медианой говорит что в данных выбросы.

Принято считать что 30 минут простоя за новую сессию, не имея иных вводных мы так же возьмем это за основу:

Хорошо переходим дальше к сессиям пользователей:

посмотрим сколько у нас сессий с продолжительность 0:

почти 1/3 всех сессий

Посмотрим на них подробнее:

Нельзя сказать что это какой то сбой, так как есть сессии где:

посмотрим продолжительность 95 и 99%

99% - не превышает 92 мин.

Выведем график продолжительности сессии:

построимграфик продолжительности сессии по дням

средняя продолжительность сессии очень не стабильная. если рассматривать с 7 октября по 2 ноября то тренд падающий.

Посмотрим как распределяется среднее время по дням недели:

Видим что в понедельник и воскресенье(6 минут) пользователи в среднем проводят времени больше чем в другие дни(5 минут).

Посмотрим если сложить все сессии (общее время всех пользователей) за день:

Тут наблюдаем тренд на рост общей продолжительности от 3500-4000 мин. 7 октября до 5000-5500 к 28 октябрю и провал к 2 ноября до 3700 мин. 3 ноября возврат к 5500 мин.

По дням недели суммарное время распредиляется, в субботу самое низкое значение(16500 мин.) затем резкий рост в воскресенье и понедельник (почти 20000 мин.) и плавный спуск опять к субботе.

посмотрим на то как менялось кол-во уникальных пользователей:

Да, видим рост аудитории с 175-225 на первой неделе, к 300-350 на третьей неделе и падение к 250-275 к четвертой недели наблюдений.

Возможно рост связан с празднованием Хеллоуина 31 октября, так как после наблюдаеться спад.

Возможно усиливать рекламу в этот период(и другие некоторые праздники) при которых люди ищут подарки и костюмы к таким праздникам.

Что у нас по дням недели:

Пик кол-ва пользователей в среда и понедельник 1050-1070 пользователей, провал в субботу около 875.

*все это с учетом небольшого среза данных, всего 4 недели.

Коэффициент удержания пользователей

вызовем нашу функцию для создания профилей пользователей

Посмотрим общий кофициент удержания за 7 дней:

Удержание за 7 дней плавно спускается с 11% до 6%. удержание на 7 день стабильно около 6%.

Посмотрим общий кофициент удержания за 14 дней:

С увеличением горизонта кофициент продолжает снижаться и останавливается около 4% к 13 дню.

Динамика показывает что c 18 октября начинается снижение с 4% к в район 2,5%

Посотрим на удержание с разбиением на источники:

Дополнительно посмотрим на хитмэп:

В разрезе деления по источникам за 7 дней можно отметить

По динамике на 7 день можно отметить:

Частота совершения событий

Посмотрим на самые частые события в базе, после нашей предобработки:

Выведим график:

как и в предварительном анализе смущает огромное кол-во показов посказки более половины(54%) всех событий, и это с учетом что кликов по подсказке всего 1%.

для более детального анализа нам нужно понимать как работает приложение, какие шаги "обязательные" и "не обязательные" и что точно можно считать целевым событием.

так как мы на данный момент не распологаем такими подробностями примем за целевое событие показ контактов (contacts_show), будем считать что пользователь заинтересовался объявление и намерен позвонить (возможно по телефону минуя само приложение).

Посмотрим как распределены события по датам:

Интересная скачкообразная тенденция tips_show в начале каждой недели событие растет к концу снижается. Из за большого кол-ва "подсказок" трудно различить другие события, посмотрим на график без нее:

Конверсия в целевое действие

Посмотрим общую конверсию:

Посмотрим конверсию по источникам:

посмотрим на общий график конверсии(+ скользящее среднее 5 дней):

в целом за 4 недели тренд положительный волнообразный(3-4%) от 16,5% до 20,5% 3 ноября,

Посмотрим на конверсию от разных источниках

Посмотрим коверсию целевого события contacts_show:

23% из всех уникальных пользователей посмотрели контакты.

Посмотрим на воронку

Таким путем до контактов никто не дошел. От поиска до фото дошли 0,3%(5 из 1666) пользователей.

Возможно просмотр фото не обязательное событие, добавим еще событие звонка:

Посмотрим на воронку

Таким образом видим что отбросив просмотр фото

так же посмотрим на такое событие но воспользовавшись сквозной воронкой:(не обязательное последовательные события)

Да тут конечно гораздо больше пользователей когда события не последовательны. Из 1666 пользователей:

В дополнение посмотрим как распределены пользователи по дням:

Ежедневная аудитория растет с 200 до 280 с пиком 23 октября 350 пользователей

посмотрим как распределены пользователи по каналам:

так же посмотрим как пользователи распределены по событиям

В целом конверсия в целевое событие contacts_show растет на 3-4%(от 16,5% до 20,5%) по итогам 4 недель, скорее всго связано с ростом аудитории.

Сегментирование пользователей

ссылка в содержание

Проведем сегментирование пользователей на группы

Сделаем сегментирования наших пользователей по времени их активности(на утренние, дневные, вечерние и ночные группы) это позволит нам посмотреть поведение пользователей в различное время суток и их вовлеченность. Позволит определить наиболее активную группу это поможет для принятия решения о развития приложения, маркетинге и поддержке. Предпологая что наиболее активная и совершающая целевое действие у нас дневная группа, в дальнейшем это может дать понимания где можно улучшить приложение для наиболее активной части пользователей, а так же сделать предположения что можно сделать для других групп чтобы улучшить их показатели.

Сделаем копию выделим час события:

Напишим функцию для сегментации:

Применим функцию:

Посмотрим на профили и в зависимости от предпочитаемого времени присвоим им категорию:

Посмотрим какое у нас распределение по сегментам:

Меньше всего в категории утро, но не меньше 10% от самого большой категории вечер

присвоим категории по таблицам df, profiles и session

Ответы на основные вопросы

ссылка в содержание

Пользователи какой группы склонны часто возвращаться в мобильное приложение

Динамика на 7 день:

Пользователи какой группы часто делают целевое событие

Чаще всего целевое событие делают пользователи дневной и вечерней группы 25%

Посмотрим на график:

Поиск "проблемного места", на каком-то действии сессия часто завершается не доходя до целевого

Подготовим данные, добавим разницу между последовательными событиями.

соберем все возможные пути пользователя до таймаут в 30 мин:

всего 8907 сессий путей, посмотрим на них подробнее написав функцию:

Выведем все сессии с одним действием:

Половина сессий всего с одним событием (4428 из 8907)

Выведем все сессии с двумя действиями:

28% сессий с двумя событиями (2451 из 8907)

7% сессий с тремя событиями (633 из 8907)

6% сессий с тремя событиями (505 из 8907)

Ну и посмотримчем чаще всего заканчивается сессия:

Топ 3:

Либо с приложением, либо с отчетностью что-то не так,

половина сессий это показ справки + сессии с одним событием (и то и другое 77% всех событий).

оставшиеся 23% сложно назвать последовательными действиями (все возможные комбинации с событием справка)

Проверим гипотезы

ссылка в содержание

Первая гипотеза

педварительно проверим чтобы пользователи между групп не пересекались:

отлично, установим значение alpha.

Сформулируем гипотезы:

Вторая гипотеза

Подготовим данные к проверке:

Для проверки используем нашу функцию z-тест для пропорций, сформулируем гипотезы:

Третья гипотеза

проверим чтобы пользователи между групп не пересекались:

хорошо переходим к гипотезам

Сформулируем гипотезы:

Четвертая гипотеза

подготовим данные конверсии

Сформулируем гипотезы:

Пятая гипотеза

Сформулируем гипотезы:

Выводы по гипотезам:

  1. p-значение: 0.97 Не получилось отвергнуть нулевую гипотезу, считаем что различий по удержанию пользователей использующих Yandex и Google (retention rate) нет.
  2. p-значение: 0.82 Не получилось отвергнуть нулевую гипотезу, считаем что конверсия в целевое событие у google и yandex равна
  3. p-значение: 0.925 Не получилось отвергнуть нулевую гипотезу, считаем что различий по удержанию пользователей днем и в другое время суток нет.
  4. p-значение: 0.037 *Отвергаем нулевую гипотезу, переходим к альтернативной - различия по конверсии у пользователей использующих приложение днем и в другое время суток есть.
  5. p-значение: 0.002 Отвергаем нулевую гипотезу, переходим к альтернативной - различия по конверсии у пользователей использующих приложение вечером и в другое время суток есть.

Вывод

ссылки на разделы:

  1. Обзор данных
  2. Предобработка данных
  3. Исследовательский анализ данные
  4. Сегментирование пользователей
  5. Ответы на основные вопросы
  6. Проверим гипотезы

В начале выводов хотелось бы обозначить некоторые вопросы которые могли бы дать более развернутое исследование:

Так же обозначим проблемные места в данных:

В связи с проведенным исследованием можно сделать такие выводы:

Рекомендация.